#选择编译工具链
CROSS_COMPILE = arm-none-eabi-
CC	:= $(CROSS_COMPILE)gcc
CXX	:= $(CROSS_COMPILE)g++
AS	:= $(CROSS_COMPILE)as
AR	:= $(CROSS_COMPILE)ar
LD	:= $(CROSS_COMPILE)ld
OBJCOPY :=$(CROSS_COMPILE)objcopy
OBJDUMP	:=$(CROSS_COMPILE)objdump
SIZE	:=$(CROSS_COMPILE)size

#编译输出的路径
OUTPUT :=output/

#查找当前目录下所有的inc文件夹
allincdir	:= $(shell find ./ -name inc -type d)


#编译的CFLAGS 选项中添加头文件路径
CFLAGS	+= $(addprefix -I,$(allincdir))
CFLAGS  += -Wall -O0 -g -Wno-missing-braces -std=gnu99  -mthumb -mcpu=cortex-m3 -mfloat-abi=soft -D__NO_SYSTEM_INIT -lnosys --specs=nano.specs -ffunction-sections -fdata-sections

#设置为环境变量,方便在makefile.build中使用
export CC CXX AS AR LD OBJCOPY OBJDUMP SIZE CFLAGS OUTPUT 

#编译项目的目标名称
PROJECTNAME = sharertos

#需要编译的文件夹名称，即项目下需要编译的文件夹路径名
PROJECTSRCDIR  = mcudevice/
PROJECTSRCDIR += user/
PROJECTSRCDIR += kernel/

#链接脚本路径
LDDIR = mcudevice/stm32f205/

#链接选项
LDFLAGS += -I ./include/generated
LDFLAGS += -nostartfiles -Wl,--gc-sections,-Map=$(OUTPUT)$(PROJECTNAME).map,-cref -mcpu=cortex-m3 -march=armv7-m  -T$(LDDIR)stm32f2xx.ld

#用于生成bin文件的依赖文件的名称,例如user/build-in.o
allbuildfile = $(addsuffix build-in.o,$(addprefix $(OUTPUT),$(PROJECTSRCDIR)))

#目标文件
all:$(OUTPUT)$(PROJECTNAME).bin 

#生成bin文件
$(OUTPUT)$(PROJECTNAME).bin:$(OUTPUT)$(PROJECTNAME).elf
	$(OBJCOPY)	-O binary $^ $@


$(OUTPUT)$(PROJECTNAME).elf: build-in 
	$(CC) $(CFLAGS) -o $@ $(allbuildfile) $(LDFLAGS)

#调用makefile.build 文件生成对应的build-in文件，这个地方应该可以用foreach的函数去实现，没有验证
#目前要用的话直接像后加3 4 等这样的	
#$(allbuildfile):FORCE
build-in:FORCE
	make -f Makefile.build obj=$(word 1,$(PROJECTSRCDIR))
	make -f Makefile.build obj=$(word 2,$(PROJECTSRCDIR))
	make -f Makefile.build obj=$(word 3,$(PROJECTSRCDIR))

#清除文件
clean:
	-rm -rf $(OUTPUT)
	
#实现menuconfig
menuconfig:Kconfig
	./tools/mconf $<
	./tools/conf -s --syncconfig $<
	rm -rf $(OUTPUT)

#下载到mcu中    
download:
	echo "si 1" >> jlinkcmd #选择swd端口
	echo "speed 4000" >>jlinkcmd #设置速度
	echo "device STM32F205RE" >> jlinkcmd #选择mcu型号
	echo "r" >> jlinkcmd #重新复位
	echo "h" >> jlinkcmd #挂起目标
	#echo "erase" >> jlinkcmd #全部擦除flash
	echo "loadfile $(OUTPUT)$(PROJECTNAME).bin 0x08000000" >> jlinkcmd #烧录
	echo "g" >> jlinkcmd #运行
	echo "qc" >> jlinkcmd #退出
	JLinkExe -CommanderScript jlinkcmd
	rm jlinkcmd

FORCE:
.PHONY:FORCE
